#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QToolBar>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // QMenuBar* menuBar = new QMenuBar();
    /* 上述程序如果窗口关闭,对象树释放,此时进程也就结束了.
     * 进程结束,自然所有内存都回收给系统~~，上述内存泄露也不会造成影响,
     * 但是如果这样的代码是出现在一个多窗口的程序中：
     * 如果涉及到窗口的频繁跳转切换窗口的频繁创建销毁)，
     * 上述内存泄露就会更严重一些
     * 服务器比客户端更害怕内存泄漏
     */

    QMenuBar* menuBar = this->menuBar();
    this->setMenuBar(menuBar);
    /*
     * 1.如果 QMenuBar 已经存在 直接获取并返回
     * 2.如果 QMenuBar 不存在,就先创建一个新的,再返回
     */


    QMenu* menu = new QMenu("菜单");
    menu->setIcon(QIcon(":/open.png"));
    menuBar->addMenu(menu);

    // 工具栏是需要手动创建出来的. 自身不会自动创建.
    QToolBar* toolBar = new QToolBar();
    this->addToolBar(Qt::LeftToolBarArea, toolBar); // 停留在左侧

    QAction* action1 = new QAction("动作1");
    action1->setIcon(QIcon(":/open.png"));
    QAction* action2 = new QAction("动作2");
    action2->setIcon(QIcon(":/save.png"));
    // QAction在添加到两个父类下，在一方析构后，另一方不会重复调用析构

    // 在菜单项放在菜单中
    menu->addAction(action1);
    menu->addSeparator(); // 分割线
    menu->addAction(action2);

    // 菜单项放到工具栏中
    toolBar->addAction(action1);
    toolBar->addAction(action2);

    // 只允许停靠在左侧或者右侧
    toolBar->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea);
    // 设置不允许浮动
    toolBar->setFloatable(false);
    // 设置不允许移动
    toolBar->setMovable(false);

    connect(action1, &QAction::triggered, this, &MainWindow::handle1);
    connect(action2, &QAction::triggered, this, &MainWindow::handle2);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::handle1()
{
    qDebug() << "handle1";
}

void MainWindow::handle2()
{
    qDebug() << "handle2";
}

